/*! \file InPerAlb.h
    \brief Modulo Percistencia de Albuns.

   \\fazer comentarios
 */

#ifndef PerAlb
#define PerAlb

#ifdef PerAlb_Serv
#define ExtPA
#else
#define ExtPA extern
#endif

#define ARQUIVO_PA "Album.txt"
#define NARQUIVO_PA "Album"
#define TAMANHOREG_PA 74
#define EXTENSAO_PA ".txt"
#define VARIAVELCONTROLE_PA '$'

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "InVetBit.h"

/**
   \struct Album_M
   \brief Essa e a estrutura que classifica o usario no contexto modulo de persistencia usuario variaveis
 */
struct Album_M {
    char CpfUser[12]; /**< Um vetor de caracteres com 12 posicoes que quarda o cpf do usuario a quem o album pertence*/
    char Codig[11]; /**< Um vetor de caracteres com 11 posicoes que quarda o codigo do Album */
    char Nome[16]; /**< Um vetor de caracteres com 15 posicoes que quarda o nome do Album*/
    char Descr[31]; /**< Um vetor de caracteres com 31 posicoes que quarda a descriçao do Album*/
    int NumerFotos; /**< um inteiro que quarda o numero de fotos que fotos que o Album contem */
    int Priva; /**< int que diz o nivel de privacidade \n 1 = privado \n 0 = publico*/
};

/*! \var typedef struct Album_M AlbumPA
    \brief Representacao do Album no centexto Modulo Percistencia Album
 */
typedef struct Album_M Album_PA;

int AddAlbum_PA(Album_PA*);

/*! \fn ExtPA Album* PegaAlbum (char* cpfUser, char* codigAlbum);
    \brief Responsavel por pencher uma struct album.
    \param cpfUser : O cpf do ususario a quem o album pertence.
   \param CodigoAlbum : O codigo do album a ser retornado.
   \return Uma Struct com as informaçoes do Album procurado.
 */
ExtPA int PegaAlbum_PA(const char* CpfPass, const char*, Album_PA*);

/*! \fn ExtPA int AtualizaAlbum (Album* albumAtual)
    \brief Responsavel por atualizar os dados de um lbum com os dados da struct que foi passada.
    \param Uma struct prechida com os novos dados do Album.
   \return Um inteano que retorna verdadeiro se o album foi atualizado com sucesso, e falso se ouve falha no atualizar o arquivo.
 */
ExtPA int AtualizaAlbum_PA(Album_PA*);

/*! \fn ExtPA int DeletaAlbum(char* , char*);
    \brief Responsavel por deletar um certo Album.
    \param cpfUser : O cpf do ususario a quem o album pertence.
   \param CodigoAlbum : O codigo do album a ser deletado.
   \return Um inteano que retorna verdadeiro se o Album foi deletado com sucesso, e falso se ouve falha no atualizar o arquivo.
 */
ExtPA int DeletaAlbum_PA(const char*, const char*);

/*! \fn ExtPU int AtualizaUser(User* usuaAtua_Pass)
    \brief Responsavel por atualizar os dados do usuario com os dados da struct que foi passada.
    \param Uma struct prechida com os novos dados do usuario.
    \return Um inteano que retorna verdadeiro se o usuario foi atualizado com sucesso, e falso se ouve falha no atualizar o arquivo.
 */
ExtPA int ListaAlbunsPublicos(const char*, const char*, int);

/*! \fn ExtPF int RetiraFoto(char*, char*);
    \brief Responsavel por atualizar os dados de um album sobre o numero de fotos que pertencem a esse.
    \param cpfUser : O cpf do ususario a quem o album pertence.
   \param CodigoAlbum : O codigo do album a ter o valor de fotos atualizado.
   \return Um inteano que retorna verdadeiro se o valor foi atualizado com sucesso, e falso se ouve falha no atualizar o arquivo.
 */
ExtPA int RetiraFotoAoAlbum_PA(const char*, const char*);

/*! \fn ExtPF int AdicionaFoto(char*, char*);
    \brief Responsavel por atualizar os dados de um album sobre o numero de fotos que pertencem a esse.
    \param cpfUser : O cpf do ususario a quem o album pertence.
   \param CodigoAlbum : O codigo do album a ter o valor de fotos atualizado.
   \return Um inteano que retorna verdadeiro se o valor foi atualizado com sucesso, e falso se ouve falha no atualizar o arquivo.
 */
ExtPA int AdicionaFotoAlbum_PA(const char*, const char*);

ExtPA int NumeroFotosAlbum_PA(const char*, const char*);

#endif
